<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.6" />
<title>Release notes for Gerrit 2.0.13, 2.0.13.1</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

pre {
  padding: 0;
  margin: 0;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }


/*
 * xhtml11 specific
 *
 * */

tt {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

.monospaced {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}
</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install(2);
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
<h1>Release notes for Gerrit 2.0.13, 2.0.13.1</h1>
<span id="revnumber">version 2.0.13 (from v2.1.1.1-104-gc20e283)</span>
<div id="toc">
  <div id="toctitle">Table of Contents</div>
  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p>Gerrit 2.0.13.1 is now available in the usual location:</p></div>
<div class="paragraph"><p><a href="http://code.google.com/p/gerrit/downloads/list">http://code.google.com/p/gerrit/downloads/list</a></p></div>
<div class="paragraph"><p><strong>WARNING: This version contains a major configuration change.</strong></p></div>
<div class="paragraph"><p>The schema upgrade needs to run in multiple parts.  Apply the first half:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>  java -jar gerrit.war --cat sql/upgrade011_012_part1.sql | psql reviewdb</tt></pre>
</div></div>
<div class="paragraph"><p>Now convert the system_config table to <tt>$site_path/gerrit.config</tt>.</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>  java -jar gerrit.war ConvertSystemConfig</tt></pre>
</div></div>
<div class="paragraph"><p>or, do this conversion by hand.  See below for the mapping.</p></div>
<div class="paragraph"><p>After verifying <tt>$site_path/gerrit.config</tt> is correct for your installation, drop the old columns from the system_config table.  <strong>This causes configuration data loss.</strong></p></div>
<div class="listingblock">
<div class="content">
<pre><tt>  java -jar gerrit.war --cat sql/upgrade011_012_part2.sql | psql reviewdb</tt></pre>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_configuration_mapping">Configuration Mapping</h2>
<div class="sectionbody">
<div class="paragraph"><p>|| <strong>system_config</strong>                || <strong>$site_path/gerrit.config</strong>     ||
|| max_session_age                || auth.maxSessionAge             ||
|| canonical_url                  || gerrit.canonicalWebUrl         ||
|| gitweb_url                     || gitweb.url                     ||
|| git_base_path                  || gerrit.basePath                ||
|| gerrit_git_name                || user.name                      ||
|| gerrit_git_email               || user.email                     ||
|| login_type                     || auth.type                      ||
|| login_http_header              || auth.httpHeader                ||
|| email_format                   || auth.emailFormat               ||
|| allow_google_account_upgrade   || auth.allowGoogleAccountUpgrade ||
|| use_contributor_agreements     || auth.contributorAgreements     ||
|| sshd_port                      || sshd.listenAddress             ||
|| use_repo_download              || repo.showDownloadCommand       ||
|| git_daemon_url                 || gerrit.canonicalGitUrl         ||
|| contact_store_url              || contactstore.url               ||
|| contact_store_appsec           || contactstore.appsec            ||</p></div>
<div class="paragraph"><p>See also [<a href="http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html">http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html</a> Gerrit2 Configuration].</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_new_features">New Features</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
GERRIT-180  Rewrite outgoing email to be more user friendly
</p>
<div class="paragraph"><p>A whole slew of feature improvements on outgoing email formatting was closed by this one (massive) rewrite of the outgoing email implementation.</p></div>
</li>
<li>
<p>
GERRIT-187  Make n/p jump to last/first line if no more hunks are &#8230;
</p>
<div class="paragraph"><p>When in a patch view (side by side or unified) new key bindings n/p jump to the previous or next hunk, which is very useful if you have context set to Whole File.</p></div>
</li>
<li>
<p>
GERRIT-59   Add Next/Previous/Up links to the PatchScreen
</p>
<div class="paragraph"><p>Patch views now contain links to the next and previous file in the patch set, as well as back up to the change.  This has been a very long standing UI glitch that is finally resolved.</p></div>
</li>
<li>
<p>
Add "gerrit show-queue" to display the work queue
</p>
</li>
<li>
<p>
GERRIT-110  Add admin command "gerrit replicate" to force resync a&#8230;
</p>
</li>
<li>
<p>
Document all server side command line tools
</p>
<div class="paragraph"><p>There are new admin commands available over SSH, and all commands are now documented online.  See [<a href="http://gerrit.googlecode.com/svn/documentation/2.0/cmd-index.html">http://gerrit.googlecode.com/svn/documentation/2.0/cmd-index.html</a> Command Line Tools].  The new <tt>gerrit replicate</tt> is very useful when a slave goes offline for a bit, and returns later.</p></div>
</li>
<li>
<p>
Add remote.<tt>&lt;`name</tt>&gt;`.replicationdelay to control delay
</p>
</li>
<li>
<p>
GERRIT-110  Automatically replicate all projects at startup
</p>
</li>
<li>
<p>
GERRIT-110  Allow replication to match only some hosts
</p>
</li>
<li>
<p>
GERRIT-200  Schedule replication by remote, not by project
</p>
<div class="paragraph"><p>Replication has been made more robust by allowing the administrator to control the delay, as to isolate replication scheduling into different pools.  This is very useful when replicating to multiple sites, e.g. to a warm-spare in the same data center, and to a far away slave in another country.  Gerrit also now forces a full replication on startup, to ensure all slaves are consistent.</p></div>
</li>
<li>
<p>
Move sshd_port to gerrit.config as sshd.listenaddress
</p>
<div class="paragraph"><p>The internal SSHD can now be bound to any IP address/port combinations, which can be useful if the system has multiple virtual IP addresses on a single network interface.</p></div>
</li>
<li>
<p>
Switch from Java Mail to Apache Commons NET basic SMTP&#8230;
</p>
</li>
<li>
<p>
Block rcpt to addresses not on a whitelist
</p>
<div class="paragraph"><p>The new <tt>sendemail</tt> section of <tt>$site_path/gerrit.config</tt> now controls the configuration of the outgoing SMTP server, rather than relying upon a JNDI resource.  See [<a href="http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html">http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html</a> configuration] section sendemail for more details.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_bug_fixes">Bug Fixes</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Fix file browser in patch that is taller than the wind&#8230;
</p>
</li>
<li>
<p>
GERRIT-184  Make <em>f</em> toggle the file browser popup closed
</p>
</li>
<li>
<p>
GERRIT-188  Fix key bindings in patch when changing the old or new&#8230;
</p>
</li>
<li>
<p>
GERRIT-211  Remove spurious whitespace from blank lines in diff vi&#8230;
</p>
</li>
<li>
<p>
GERRIT-196  Fix CSS styling on the history table
</p>
</li>
<li>
<p>
GERRIT-193  Automatically switch from empty side-by-side to unifie&#8230;
</p>
<div class="paragraph"><p>Misc. bug fixes on the patch view screens that I identified after the 2.0.12 release.</p></div>
</li>
<li>
<p>
GERRIT-182  Don&#8217;t NPE when the remote peer address isn&#8217;t yet known
</p>
</li>
<li>
<p>
GERRIT-192  Fix NPE in MergeOp when submit to new branch fails due&#8230;
</p>
</li>
<li>
<p>
GERRIT-207  Fix StackOverflowError during cherry-pick submit
</p>
<div class="paragraph"><p>Misc. internal bugs, primarily caused by stupid programming mistakes.</p></div>
</li>
<li>
<p>
Invalid sshkeys cache entries when the sshUserName cha&#8230;
</p>
<div class="paragraph"><p>If a user tried to connect with the wrong user name, then tried to change their SSH User Name through the web UI (by selecting a different preferred email address), the negative cache entry created during their first connection attempt was stuck in the cache and future connections were still rejected.  Gerrit now flushes both the old and the new user name cache entries when the user name changes.</p></div>
</li>
<li>
<p>
GERRIT-210  Allow MINA SSHD to log about host key creation
</p>
</li>
<li>
<p>
Make SSH host key loading more consistent over time
</p>
<div class="paragraph"><p>It has been pointed out several times that its unclear why Gerrit keeps changing its host key with each startup; this is due to a failure to write the generated host key to disk.  We now log about it, and make it less likely that other sorts of configuration modifications would cause an unexpected host key change.</p></div>
</li>
<li>
<p>
Always run SSH replication in BatchMode
</p>
</li>
<li>
<p>
Special case NoRemoteRepository during replication
</p>
</li>
<li>
<p>
Simplify error logged for invalid URLs in replication&#8230;.
</p>
</li>
<li>
<p>
Special case UnknownHostKey during replication
</p>
</li>
<li>
<p>
Allow replication.config to drive the thread pool larg&#8230;
</p>
</li>
<li>
<p>
Fix treatment of symbolic refs in PushOp
</p>
<div class="paragraph"><p>A bunch of bug fixes related to error handling during replication.  Errors are now logged in a more clear fashion, which should help administrators to debug replication problems.</p></div>
</li>
<li>
<p>
Restore Ctrl-Backspace in comment editor
</p>
</li>
<li>
<p>
Use server name for ssh_info instead of local address
</p>
</li>
<li>
<p>
Use server name for advertised SSH host keys
</p>
</li>
<li>
<p>
Don&#8217;t reverse resolve CNAMEs when advertising our SSHD
</p>
<div class="paragraph"><p>Bug fixes identified after release of 2.0.13, rolled into 2.0.13.1.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_other_changes">Other Changes</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Start 2.0.13 development
</p>
</li>
<li>
<p>
Use gwtexpui 1.1.1-SNAPSHOT
</p>
</li>
<li>
<p>
Document the Patch.PatchType and Patch.ChangeType enum
</p>
</li>
<li>
<p>
Document the Change.Status enum
</p>
</li>
<li>
<p>
Remove useless boolean return value from ChangeMail he&#8230;
</p>
</li>
<li>
<p>
Remove pointless null assignment from PatchScreen
</p>
</li>
<li>
<p>
Move ChangeMail into its own server side package
</p>
</li>
<li>
<p>
Fix patch set replacement emails to correctly retain r&#8230;
</p>
</li>
<li>
<p>
Document ReviewDb.nextChangeMessageId
</p>
</li>
<li>
<p>
Document some of the core database entity graph
</p>
</li>
<li>
<p>
Rewrite the replication documentation
</p>
</li>
<li>
<p>
Add an anchor for Other Servlet Containers
</p>
</li>
<li>
<p>
Fix minor formatting style nit in PushQueue
</p>
</li>
<li>
<p>
Extract the PushOp logic from PushQueue
</p>
</li>
<li>
<p>
Refactor PushQueue.scheduleUpdate to be smaller methods
</p>
</li>
<li>
<p>
Refactor WorkQueue to support task inspection
</p>
</li>
<li>
<p>
Reload the submit queue on startup with a 15 second de&#8230;
</p>
</li>
<li>
<p>
Move the per-command ReviewDb handle up to AbstractCom&#8230;
</p>
</li>
<li>
<p>
Don&#8217;t attempt to replicate the magic "-- All Projects &#8230;
</p>
</li>
<li>
<p>
Document that remote.&lt;name&gt;.uploadpack is also support&#8230;
</p>
</li>
<li>
<p>
Correct the defaults for remote uploadpack, receivepack
</p>
</li>
<li>
<p>
Use a HashSet for the active tasks, rather than a List
</p>
</li>
<li>
<p>
Use gwtorm 1.1.1-SNAPSHOT
</p>
</li>
<li>
<p>
Remove references in documentation to My&gt;Settings
</p>
</li>
<li>
<p>
Mention <em>git receive-pack</em> --cc/--reviewer args
</p>
</li>
<li>
<p>
Fix NPE in "gerrit replicate --all"
</p>
</li>
<li>
<p>
Put a link back to the index in every page footer
</p>
</li>
<li>
<p>
Document the other standard caches
</p>
</li>
<li>
<p>
Delete now unnecessary ImportProjectSubmitTypes
</p>
</li>
<li>
<p>
Don&#8217;t start background queues during command line tools
</p>
</li>
<li>
<p>
Create GerritConfig after parsing gerrit.config file
</p>
</li>
<li>
<p>
Create a utility to export system_config to gerrit.con&#8230;
</p>
</li>
<li>
<p>
Move contact store configuration to gerrit.config
</p>
</li>
<li>
<p>
Move gerrit_git_email,gerrit_git_name to gerrit.config
</p>
</li>
<li>
<p>
Move authentication fields from system_config to gerri&#8230;
</p>
</li>
<li>
<p>
Move gitwebUrl to gerrit.config
</p>
</li>
<li>
<p>
Move use_repo_download to gerrit.config
</p>
</li>
<li>
<p>
Move canonical_url, git_daemon_url to gerrit.config
</p>
</li>
<li>
<p>
Move git_base_path to gerrit.config
</p>
</li>
<li>
<p>
Document where the nextval_project_id function is for &#8230;
</p>
</li>
<li>
<p>
Use gwtorm, gwtexpui 1.1.1 final versions
</p>
</li>
<li>
<p>
Add sendemail.enable to disable email output
</p>
</li>
<li>
<p>
Use mvn -offline mode when running ./to_hosted.sh
</p>
</li>
<li>
<p>
Disable AES192CBC and AES256CBC if unlimited cryptogra&#8230;
</p>
</li>
<li>
<p>
gerrit 2.0.13
</p>
</li>
</ul></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Version 2.0.13 (from v2.1.1.1-104-gc20e283)<br />
Last updated 2013-05-08 07:50:03 PDT
</div>
</div>
</body>
</html>
